package com.xugongzhang.demo;

import java.util.concurrent.FutureTask;
import java.util.concurrent.TimeUnit;

/**
 * @author X
 * @date 2022/6/27 21:21
 */
public class FutureDemo {

    public static void main(String[] args) throws Exception {
        FutureTask<String> futureTask = new FutureTask<>(() -> {
            System.out.println(Thread.currentThread().getName() + "进来了。。。");
            TimeUnit.SECONDS.sleep(3);
            return "task over";
        });
        new Thread(futureTask, "t1").start();

        System.out.println(Thread.currentThread().getName() + "忙其他的。。。");
        // get方法会等到任务的结果才结束，所以要放在其他任务的后面获取任务执行的结果
        // 容易造成程序阻塞
        // System.out.println(futureTask.get());
        // 设定等待的时间后,达到了等待的时间任务还没有返回结果,就会抛出异常
        // System.out.println(futureTask.get(2, TimeUnit.SECONDS));
        while (true) {
            if (futureTask.isDone()) {
                System.out.println(futureTask.get());
                break;
            }
            else {
                TimeUnit.MILLISECONDS.sleep(500);
                System.out.println("正在处理中...");
            }
        }
    }
}
